// 生成随机数
export function randomNum(max, min) {
  let num = parseInt(Math.random() * (max - min + 1) + min);
  return num;
}

// 获取当前时间（年月日时分秒）
/* 
使用
formatDate('YY') -- "2022"
formatDate('YY-MM') -- "2022-07"
formatDate('YY-MM-DD') -- "2022-07-01"
formatDate('YY-MM-DD hh:mm:ss') -- "2022-07-01 10:08:40"
formatDate('星期w') -- "星期四"
*/
export function formatDate(fmt, dateStr = null) {
  let date = null
  if (!dateStr) {
    date = new Date()
  } else {
    date = new Date(dateStr)
  }

  const o = {
    'Y+': date.getFullYear(),
    'M+': date.getMonth() + 1, // 月
    'D+': date.getDate(), // 日
    'h+': date.getHours(), // 时
    'm+': date.getMinutes(), // 分
    's+': date.getSeconds(), // 秒
    W: date.getDay() // 周
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, () => {
        if (k === 'W') {
          // 星期几
          const week = ['日', '一', '二', '三', '四', '五', '六']
          return week[o[k]]
        } else if (k === 'Y+' || RegExp.$1.length === 1) {
          // 年份 or 小于10不加0
          return o[k]
        } else {
          return ('00' + o[k]).substr(('' + o[k]).length) // 小于10补位0
        }
      })
    }
  }
  return fmt
}

// 获取本月或指定月份的最后一天
export function getMonthFinalDay(year, month) {
  var day = '';
  if (year == null || year == undefined || year == '') {
    year = new Date().getFullYear();
  }
  if (month == null || month == undefined || month == '') {
    month = new Date().getMonth() + 1;
  }
  day = new Date(new Date(year, month).setDate(0)).getDate();
  return year + "-" + month + "-" + day;

}

// 获取某个日期几天前的日期
export function dateBefore(begin_date, num = 0) {
  var begin = new Date(begin_date);
  if (num < 0) {
    var new_ = new Date(((begin.getTime() / 1000) - (-num * 86400)) * 1000);
  } else {
    var new_ = new Date(((begin.getTime() / 1000) + (num * 86400)) * 1000);
  }
  var time_ = new_.toLocaleDateString().replace(/\//g, "-");
  var arr = time_.split("-");

  arr[1] = '0' + arr[1] < 10 ? '0' + arr[1] : arr[1];
  arr[2] = '0' + arr[2] < 10 ? '0' + arr[2] : arr[2];
  return arr.join('-');
}

// 判断第一个数组是否完全包含第二个数组
export function isContained(a, b) {
  // a和b其中一个不是数组，直接返回false
  if (!(a instanceof Array) || !(b instanceof Array)) return false;
  const len = b.length;
  // a的长度小于b的长度，直接返回false
  if (a.length < len) return false;
  for (let i = 0; i < len; i++) {
    // 遍历b中的元素，遇到a没有包含某个元素的，直接返回false
    if (!a.includes(b[i])) return false;
  }
  // 遍历结束，返回true
  return true;
};


/**
 * 时间戳转换成 刚刚/几天前
 * @param {number} time
 * @param {string} option
 * @returns {string}
 */
export function formatTime(time, option) {
  if (('' + time).length === 10) {
    time = parseInt(time) * 1000
  } else {
    time = +time
  }
  const d = new Date(time)
  const now = Date.now()

  const diff = (now - d) / 1000

  if (diff < 30) {
    return '刚刚'
  } else if (diff < 3600) {
    // less 1 hour
    return Math.ceil(diff / 60) + '分钟前'
  } else if (diff < 3600 * 24) {
    return Math.ceil(diff / 3600) + '小时前'
  } else if (diff < 3600 * 24 * 2) {
    return '1天前'
  }
  if (option) {
    return parseTime(time, option)
  } else {
    return (
      d.getMonth() +
      1 +
      '月' +
      d.getDate() +
      '日' +
      d.getHours() +
      '时' +
      d.getMinutes() +
      '分'
    )
  }
}

// 递归根据 code 获取 name
export function getNameByCode(tree, code) {
  let result;
  if (!tree) {
    return;
  }
  for (let i = 0; i < tree.length; i++) {
    let item = tree[i];
    if (item.code == code && !result) {
      result = item.name;
      break;
    } else if (item.children && item.children.length > 0 && !result) {
      result = this.getStorageName(item.children, code);

    }
  }
  return result;
}
